package com.zbkj.service.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import com.zbkj.common.model.traceability.Batches;
import com.zbkj.common.request.traceability.BatchesPageRequest;
import com.zbkj.common.request.traceability.BatchesRequest;

import com.zbkj.common.model.admin.SystemAdmin;
import com.zbkj.common.request.PageParamRequest;
import com.zbkj.common.request.traceability.BatchesFilterRequest;
import com.zbkj.common.response.traceability.BatchesInfoResponse;

import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.IOException;

/**
 * 商品批次Service接口
 * +----------------------------------------------------------------------
 * | CRMEB [ CRMEB赋能开发者，助力企业发展 ]
 * +----------------------------------------------------------------------
 * | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
 * +----------------------------------------------------------------------
 * | Licensed CRMEB并不是自由软件，未经许可不能去掉CRMEB相关版权
 * +----------------------------------------------------------------------
 * | Author: xiaolic
 * +----------------------------------------------------------------------
 */
public interface BatchesService extends IService<Batches> {

    /**
     * 分页查询商品批次列表
     * @param request 分页请求参数
     * @return 分页结果
     */
    PageInfo<Batches> getPageList(BatchesPageRequest request);

    /**
     * 创建商品批次
     * @param request 创建请求参数
     * @return 创建结果
     */
    Boolean create(BatchesRequest request);

    /**
     * 更新商品批次
     * @param request 更新请求参数
     * @return 更新结果
     */
    Boolean update(BatchesRequest request);

    /**
     * 删除商品批次
     * @param id 批次ID
     * @return 删除结果
     */
    Boolean delete(Long id);

    /**
     * 获取商品批次详情
     * @param id 批次ID
     * @return 批次详情
     */
    Batches getDetail(Long id);
    
    /**
     * 检查号段是否重叠
     * @param startSerial 开始号段
     * @param endSerial 结束号段
     * @param productId 商品ID
     * @param merchantId 商家ID
     * @param batchId 排除的批次ID（更新时使用）
     * @return 是否重叠
     */
    Boolean checkSerialOverlap(Long startSerial, Long endSerial, Integer productId, Integer merchantId, Long batchId);
    
    /**
     * 批量下载批次二维码
     * @param batchId 批次ID
     * @param response HTTP响应对象，用于输出ZIP文件
     * @throws IOException IO异常
     */
    void downloadBatchQrCodes(Long batchId, HttpServletResponse response) throws IOException;
    
    /**
     * 获取当前管理员相关的所有未删除批次
     * @param admin 当前管理员
     * @param request 查询条件
     * @param pageParamRequest 分页参数
     * @return 批次信息列表
     */
    PageInfo<BatchesInfoResponse> getCurrentAdminBatches(SystemAdmin admin, BatchesFilterRequest request, PageParamRequest pageParamRequest);

    /**
     * 生成带溯源ID的二维码图片
     * @param qrCodeUrl
     * @param traceId
     * @return
     */
    BufferedImage generateQrCodePicWithTraceId(String qrCodeUrl, String traceId);
    BufferedImage generateQrCodePic(String qrCodeUrl, String traceId);
}
